﻿/*******************************************************
 * 
 * 作者：胡庆访
 * 创建时间：20130326 11:11
 * 说明：此文件只包含一个类，具体内容见类型注释。
 * 运行环境：.NET 4.0
 * 版本号：1.0.0
 * 
 * 历史记录：
 * 创建文件 胡庆访 20130326 11:11
 * 
*******************************************************/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace MSDNConverter
{
    public class RawArticle
    {
        public RawArticle()
        {
            this.Children = new List<RawArticle>();
        }

        [XmlAttribute]
        public string Title { get; set; }

        [XmlAttribute]
        public string Id { get; set; }

        [XmlAttribute]
        public int Level { get; set; }

        public List<RawArticle> Children { get; set; }

        public int CountAll()
        {
            int count = 0;
            this.Traverse(a => count++);
            return count;
        }

        [XmlIgnore]
        public string RawHtml { get; set; }

        public string ToXml()
        {
            return hxy.SerializationHelper.XmlSerialize(this);
        }

        public static RawArticle FromXml(string xml)
        {
            return hxy.SerializationHelper.XmlDeserialize(typeof(RawArticle), xml) as RawArticle;
        }

        public void Traverse(Action<RawArticle> action)
        {
            Queue<RawArticle> queue = new Queue<RawArticle>();
            queue.Enqueue(this);
            while (queue.Count > 0)
            {
                var item = queue.Dequeue();

                action(item);

                foreach (var child in item.Children) { queue.Enqueue(child); }
            }
        }
    }
}